home *** CD-ROM | disk | FTP | other *** search
/ 17 Bit Software 6: Level 6 / 17 Bit - Level 6 (1998)(Epic Marketing)[!].iso / quartz / q0052.dms / q0052.adf / SOURCES / NPReplayV2.03I.S < prev    next >
Text File  |  1991-06-28  |  7KB  |  426 lines

  1. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  2. * NoisePacker V2.03 PlayRoutine ©1991 Twins of Phenomena. *
  3. * Used registers are d0-d7/a0-a6.     Using lev6irq.      *
  4. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  5.  
  6. np_data=$60000
  7.  
  8. np_init:
  9.     lea    np_data,a4
  10.     lea    $dff000,a5
  11.     lea    np_position(pc),a6
  12.     moveq    #2,d0
  13.     moveq    #0,d1
  14.     move.l    a4,a3
  15. np_init1:
  16.     add    (a4)+,a3
  17.     move.l    a3,(a6)+
  18.     dbf    d0,np_init1
  19.     move    (a4)+,d0
  20.     add.l    d0,a3
  21.  
  22.     move.l    $78.w,(a6)+
  23.     move.l    #$01060100,(a6)+
  24.     move    #$8200,(a6)+
  25.     move.l    d1,(a6)+
  26.     move.l    #np_portup,(a6)+
  27.     move.l    #np_portdown,(a6)+
  28.     move.l    #np_port,(a6)+
  29.     move.l    #np_vib,(a6)+
  30.     move.l    #np_port2,(a6)+
  31.     move.l    #np_vib2,(a6)+
  32.     move.l    #np_volslide,(a6)+
  33.     move.l    #np_arp,(a6)+
  34.     move.l    #np_songjmp,(a6)+
  35.     move.l    #np_setvol,(a6)+
  36.     move.l    #np_pattbreak,(a6)+
  37.     move.l    #np_filter,(a6)+
  38.     move.l    #np_setspeed,(a6)+
  39.  
  40.     moveq    #0,d0
  41.     move.l    a4,a6
  42.     add    -8(a4),a6
  43.     sub    #12,a6
  44. np_init2:
  45.     move.l    a3,(a4)
  46.     move.l    a3,a2
  47.     move    14(a4),d0
  48.     add    d0,d0
  49.     add.l    d0,a2
  50.     move.l    a2,8(a4)
  51.     move    4(a4),d0
  52.     add    d0,d0
  53.     add.l    d0,a3
  54.     add    #16,a4
  55.     cmp.l    a4,a6
  56.     bne.s    np_init2
  57.  
  58.     bset    #1,$bfe001
  59.     move    d1,$a8(a5)
  60.     move    d1,$b8(a5)
  61.     move    d1,$c8(a5)
  62.     move    d1,$d8(a5)
  63.  
  64.     lea    $bfd000,a0
  65.     move.b    #$7f,$d00(a0)
  66.     move    #$2000,$9a(a5)
  67.  
  68.     move.b    #$08,$e00(a0)
  69.     move.b    #$80,$400(a0)
  70.     move.b    #$01,$500(a0)
  71.  
  72.     tst.b    $d00(a0)
  73.     move    #$7fff,$9c(a5)
  74.     move.b    #$81,$d00(a0)
  75.     move    #$e000,$9a(a5)
  76.     rts
  77.  
  78. np_end:    moveq    #0,d0
  79.     lea    $dff000,a5
  80.     move    d0,$a8(a5)
  81.     move    d0,$b8(a5)
  82.     move    d0,$c8(a5)
  83.     move    d0,$d8(a5)
  84.     bclr    #1,$bfe001
  85.     move    #$f,$96(a5)
  86.     move    #$2000,$9a(a5)
  87.     move.l    np_oldirq(pc),$78.w
  88.     rts
  89.  
  90. np_music:
  91.     moveq    #0,d6
  92.     lea    $dff0d0,a4
  93.     lea    np_block(pc),a6
  94.     subq.b    #1,(a6)
  95.     bhi    np_nonew
  96.  
  97.     lea    np_position(pc),a3
  98.     move.l    (a3)+,a0
  99.     add    6(a6),a0
  100.     move    (a0),d0
  101.     move.l    (a3)+,a0
  102.     add    d0,a0
  103.     move.l    (a3)+,a1
  104.     add    8(a6),a1
  105.     lea    np_voidat1(pc),a2
  106.  
  107.     moveq    #8,d0
  108.     moveq    #0,d5
  109. np_loop1:
  110.     moveq    #0,d1
  111.     move    (a0)+,d1
  112.     lea    (a1,d1.l),a3
  113.     move.b    (a3)+,d1
  114.     move.b    (a3)+,d3
  115.     move.b    (a3)+,d4
  116.  
  117.     move.b    d3,d7
  118.     lsr.b    #4,d7
  119.     move.b    d1,d2
  120.     and    #1,d2
  121.     beq.s    np_loop2
  122.     moveq    #$10,d2
  123. np_loop2:
  124.     lea    np_data-8,a3
  125.     or.b    d7,d2
  126.     bne.s    np_loop3
  127.  
  128.     move.b    1(a2),d2
  129.     lsl    #4,d2
  130.     add    d2,a3
  131.     bra.s    np_loop4
  132. np_loop3:
  133.     move.b    d2,1(a2)
  134.     lsl    #4,d2
  135.     add    d2,a3
  136.     move    6(a3),4(a2)
  137. np_loop4:
  138.     and    #$f,d3
  139.     move.b    d3,2(a2)
  140.     move.b    d4,3(a2)
  141.  
  142.     and    #$fe,d1
  143.     beq.s    np_loop5
  144.  
  145.     move    np_periods-2(pc,d1.w),d7
  146.  
  147.     subq    #3,d3
  148.     beq    np_setport
  149.     subq    #2,d3
  150.     beq    np_setport
  151.  
  152.     or    d0,d5
  153.     move.b    d1,(a2)
  154.     move.b    d6,49(a2)
  155.     move    d7,24(a2)
  156.  
  157.     move.l    (a3)+,(a4)
  158.     move    (a3)+,4(a4)
  159.     addq    #2,a3
  160.     move.l    (a3)+,72(a2)
  161.     move    (a3)+,76(a2)
  162.  
  163.     subq    #6,d3
  164.     bmi.s    np_loop6
  165.     add    d3,d3
  166.     add    d3,d3
  167.     move.l    42(a6,d3.w),a3
  168.     jmp    (a3)
  169.  
  170. np_loop5:
  171.     sub    #11,d3
  172.     bmi.s    np_loop6
  173.     add    d3,d3
  174.     add    d3,d3
  175.     move.l    42(a6,d3.w),a3
  176.     jmp    (a3)
  177.  
  178. np_periods:
  179.     dc.w    $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a
  180.     dc.w    $01fc,$01e0,$01c5,$01ac,$0194,$017d,$0168,$0153,$0140
  181.     dc.w    $012e,$011d,$010d,$00fe,$00f0,$00e2,$00d6,$00ca,$00be
  182.     dc.w    $00b4,$00aa,$00a0,$0097,$008f,$0087,$007f,$0078,$0071
  183.  
  184. np_loop6:
  185.     move    24(a2),6(a4)
  186. np_loop7:
  187.     move    4(a2),8(a4)
  188.     addq    #6,a2
  189.     sub    #$10,a4
  190.     lsr    #1,d0
  191.     bne    np_loop1
  192.  
  193.     move    d5,$dff096
  194.     move.b    d5,5(a6)
  195.     move.b    1(a6),(a6)
  196.     move.l    #np_irq1,$78.w
  197.     move.b    #$19,$bfde00
  198.  
  199.     move.l    np_position(pc),a0
  200.     bset    #0,2(a6)
  201.     beq.s    np_break
  202.     addq    #3,8(a6)
  203.     cmp    #192,8(a6)
  204.     bne.s    np_next
  205. np_break:
  206.     move    d6,8(a6)
  207.     addq    #2,6(a6)
  208.     move    6(a6),d0
  209.     cmp    -4(a0),d0
  210.     bne.s    np_next
  211.     move    -2(a0),6(a6)
  212. np_next:rts
  213.  
  214. np_setvol:
  215.     move.b    d4,5(a2)
  216.     bra.s    np_loop6
  217.  
  218. np_pattbreak:
  219.     move    d6,2(a6)
  220.     bra.s    np_loop6
  221.  
  222. np_songjmp:
  223.     move    d6,2(a6)
  224.     move.b    d4,7(a6)
  225.     bra.s    np_loop6
  226.  
  227. np_setspeed:
  228.     move.b    d4,1(a6)
  229.     bra    np_loop6
  230.  
  231. np_filter:
  232.     and.b    #$fd,$bfe001
  233.     or.b    d4,$bfe001
  234.     bra    np_loop6
  235.  
  236. np_setport:
  237.     move.b    d6,50(a2)
  238.     move    d7,26(a2)
  239.     cmp    24(a2),d7
  240.     beq.s    np_clrport
  241.     bge    np_loop7
  242.     move.b    #1,50(a2)
  243.     bra    np_loop7
  244. np_clrport:
  245.     move    d6,26(a2)
  246.     bra    np_loop7
  247.  
  248. np_nonew:
  249.     lea    np_voidat1(pc),a0
  250.     moveq    #3,d0
  251. np_lop1:moveq    #0,d1
  252.     move.b    2(a0),d1
  253.     beq.s    np_lop2
  254.     subq    #8,d1
  255.     bhi.s    np_lop2
  256.     addq    #7,d1
  257.     add    d1,d1
  258.     add    d1,d1
  259.     move.l    10(a6,d1.w),a3
  260.     jmp    (a3)
  261. np_lop2:addq    #6,a0
  262.     sub    #$10,a4
  263.     dbf    d0,np_lop1
  264.     rts
  265.  
  266. np_portup:
  267.     moveq    #0,d2
  268.     move.b    3(a0),d2
  269.     sub    d2,24(a0)
  270.     cmp    #$71,24(a0)
  271.     bpl.s    np_portup2
  272.     move    #$71,24(a0)
  273. np_portup2:
  274.     move    24(a0),6(a4)
  275.     bra.s    np_lop2
  276.  
  277. np_portdown:
  278.     moveq    #0,d2
  279.     move.b    3(a0),d2
  280.     add    d2,24(a0)
  281.     cmp    #$358,24(a0)
  282.     bmi.s    np_portdown2
  283.     move    #$358,24(a0)
  284. np_portdown2:
  285.     move    24(a0),6(a4)
  286.     bra.s    np_lop2
  287.  
  288. np_arp:    moveq    #0,d2
  289.     move.b    (a6),d2
  290.     sub.b    1(a6),d2
  291.     neg.b    d2
  292.     move.b    np_arplist(pc,d2.w),d2
  293.     beq.s    np_arp0
  294.     subq.b    #2,d2
  295.     beq.s    np_arp2
  296. np_arp1:move.b    3(a0),d2
  297.     lsr    #3,d2
  298.     and    #$e,d2
  299.     bra.s    np_arp3
  300. np_arp2:move.b    3(a0),d2
  301.     and    #$f,d2
  302.     add    d2,d2
  303. np_arp3:add.b    (a0),d2
  304.     cmp    #$48,d2
  305.     bls.s    np_arp4
  306.     moveq    #$48,d2
  307. np_arp4:lea    np_periods-2(pc),a3
  308.     move    (a3,d2.w),6(a4)
  309.     bra    np_lop2
  310. np_arp0:move    24(a0),6(a4)
  311.     bra    np_lop2
  312.  
  313. np_arplist:
  314.     dc.b 0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1
  315.  
  316. np_sin:
  317.     dc.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  318.     dc.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  319.  
  320. np_vib:    move.b    3(a0),d3
  321.     beq.s    np_vib2
  322.     move.b    d3,48(a0)
  323. np_vib2:    
  324.     move.b    49(a0),d3
  325.     lsr.b    #2,d3
  326.     and    #$1f,d3
  327.     moveq    #0,d2
  328.     move.b    np_sin(pc,d3.w),d2
  329.     move.b    48(a0),d3
  330.     and    #$f,d3
  331.     mulu    d3,d2
  332.     lsr    #7,d2
  333.     move    24(a0),d3
  334.     tst.b    49(a0)
  335.     bmi.s    np_vibsub
  336.     add    d2,d3
  337.     bra.s    np_vib3
  338. np_vibsub:
  339.     sub    d2,d3
  340. np_vib3:move    d3,6(a4)
  341.     move.b    48(a0),d3
  342.     lsr.b    #2,d3
  343.     and    #$3c,d3
  344.     add.b    d3,49(a0)
  345.     cmp.b    #20,d1
  346.     bne    np_lop2
  347.  
  348. np_volslide:
  349.     move.b    3(a0),d2
  350.     add.b    d2,5(a0)
  351.     bmi.s    np_vol3
  352.     cmp.b    #$40,5(a0)
  353.     bmi.s    np_vol2
  354.     move    #$40,4(a0)
  355. np_vol2:move    4(a0),8(a4)
  356.     bra    np_lop2
  357.  
  358. np_vol3:move    d6,4(a0)
  359.     move    4(a0),8(a4)
  360.     bra    np_lop2
  361.  
  362. np_port:move.b    3(a0),d2
  363.     beq.s    np_port2
  364.     move.b    d2,29(a0)
  365.  
  366. np_port2:
  367.     move    26(a0),d2
  368.     beq.s    np_rts
  369.     move    28(a0),d3
  370.     tst.b    50(a0)
  371.     bne.s    np_sub
  372.     add    d3,24(a0)
  373.     cmp    24(a0),d2
  374.     bgt.s    np_portok
  375.     move    d2,24(a0)
  376.     move    d6,26(a0)
  377. np_portok:
  378.     move    24(a0),6(a4)
  379. np_rts:    cmp.b    #16,d1
  380.     beq.s    np_volslide
  381.     bra    np_lop2
  382.  
  383. np_sub:    sub    d3,24(a0)
  384.     cmp    24(a0),d2
  385.     blt.s    np_portok
  386.     move    d2,24(a0)
  387.     move    d6,26(a0)
  388.     move    24(a0),6(a4)
  389.     cmp.b    #16,d1
  390.     beq    np_volslide
  391.     bra    np_lop2
  392.  
  393. np_irq1:
  394.     tst.b    $bfdd00
  395.     move.b    #$19,$bfde00
  396.     move.l    #np_irq2,$78.w
  397.     move    np_block+4(pc),$dff096
  398.     move    #$2000,$dff09c
  399.     rte
  400.  
  401. np_irq2:
  402.     tst.b    $bfdd00
  403.     move.l    a6,-(sp)
  404.     lea    np_voidat2(pc),a6
  405.     move.l    (a6)+,$dff0d0
  406.     move    (a6)+,$dff0d4
  407.     move.l    (a6)+,$dff0c0
  408.     move    (a6)+,$dff0c4
  409.     move.l    (a6)+,$dff0b0
  410.     move    (a6)+,$dff0b4
  411.     move.l    (a6)+,$dff0a0
  412.     move    (a6)+,$dff0a4
  413.     move    #$2000,$dff09c
  414.     move.l    np_oldirq(pc),$78.w
  415.     move.l    (sp)+,a6
  416.     rte
  417.  
  418. np_position:    dc.l    0
  419. np_pattern:    dc.l    0
  420. np_voice:    dc.l    0
  421. np_oldirq:    dc.l    0
  422. np_block:    blk.w    31,0
  423. np_voidat1:    blk.l    18,0
  424. np_voidat2:    blk.l    6,0
  425.  
  426.